package com.business.dashboard.service;

import com.business.dashboard.entity.NewsArticle;

import java.util.List;

/**
 * 新闻文章服务接口
 * 
 * @author Claude
 * @since 2025-07-06
 */
public interface NewsArticleService {

    /**
     * 创建文章
     */
    NewsArticle createArticle(NewsArticle article);

    /**
     * 更新文章
     */
    NewsArticle updateArticle(NewsArticle article);

    /**
     * 根据ID获取文章
     */
    NewsArticle getArticleById(Long id);

    /**
     * 删除文章
     */
    boolean deleteArticle(Long id);

    /**
     * 获取文章列表（分页）
     */
    List<NewsArticle> getArticleList(int page, int size, String keyword, String status, Long categoryId);

    /**
     * 获取文章总数
     */
    long getArticleCount();

    /**
     * 根据状态获取文章数量
     */
    int getArticleCountByStatus(String status);

    /**
     * 发布文章
     */
    boolean publishArticle(Long id);

    /**
     * 归档文章
     */
    boolean archiveArticle(Long id);

    /**
     * 设置推荐状态
     */
    boolean setFeaturedStatus(Long id, Integer isFeatured);

    /**
     * 设置置顶状态
     */
    boolean setTopStatus(Long id, Integer isTop);

    /**
     * 更新浏览次数
     */
    boolean updateViewCount(Long id);

    /**
     * 获取所有新闻文章（管理员用）
     */
    List<NewsArticle> getAllNews();

    /**
     * 创建新闻文章（管理员用）
     */
    NewsArticle createNews(NewsArticle news);

    /**
     * 更新新闻文章（管理员用）
     */
    NewsArticle updateNews(NewsArticle news);

    /**
     * 删除新闻文章（管理员用）
     */
    boolean deleteNews(Long id);

    /**
     * 根据ID获取新闻文章（管理员用）
     */
    NewsArticle getNewsById(Long id);

    /**
     * 批量更新新闻状态
     */
    boolean batchUpdateStatus(List<Long> ids, String status);

    /**
     * 发布新闻
     */
    boolean publishNews(Long id);

    /**
     * 取消发布新闻
     */
    boolean unpublishNews(Long id);

    /**
     * 获取新闻统计数据
     */
    Object getNewsStats();

    /**
     * 获取新闻总数
     */
    long getNewsCount();

    /**
     * 获取已发布的新闻列表（用户端）
     */
    List<NewsArticle> getPublishedNews(Integer page, Integer limit, String category);

    /**
     * 获取已发布新闻的总数（用户端）
     */
    Long getPublishedNewsCount(String category);

    /**
     * 增加浏览量（用户端）
     */
    boolean incrementViewCount(Long id);

    /**
     * 获取热门新闻（用户端）
     */
    List<NewsArticle> getHotNews(Integer limit);

    /**
     * 获取最新新闻（用户端）
     */
    List<NewsArticle> getLatestNews(Integer limit);

    /**
     * 搜索新闻（用户端）
     */
    List<NewsArticle> searchNews(String keyword, Integer page, Integer limit);
}